package Guigu1.ExceptionTest;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.junit.Test;

/*
 * finally的使用：
 * 1、finally是可选的
 * 2、finally中声明的是一定会被执行的代码，即使catch中又出现异常了，try中有return语句，catch中有
 *    return语句等情况
 *    
 * 3、像数据库连接、输入输出流、网络编程Socket等资源，JVM是不能自动的回收的，我们需要自己手动的进行资源
 *    的释放，此时的资源释放，就需要在finally中。
 * 4、try-catch-finally可以相互嵌套
 */
public class TryCatchFinallyTest {
	@Test
	public void test2()
	{
		FileInputStream fis = null;
		try {
			File file = new File("hello.txt");
			fis = new FileInputStream(file);
			
			int data = fis.read();
			while(data!=-1)
			{
				System.out.println((char)data);
				data = fis.read();
			}
		} catch (FileNotFoundException e) 
		{
			e.printStackTrace();
		} catch (IOException e)
		{
			e.printStackTrace();
		}finally
		{
			try 
			{
				if(fis != null)
				{					
					fis.close();
				}
			} catch (IOException e) 
			{
				e.printStackTrace();
			}
		}
	}

	@Test
	public void test1()
	{
		int num = method();
		System.out.println(num);
	}
	public int method()
	{
		try
		{
			int arr[] = new int[10];
			System.out.println(arr[10]);
			return 1;
		}catch(ArrayIndexOutOfBoundsException e)
		{
			e.printStackTrace();
			return 2;
		}finally
		{
			System.out.println("我一定会被执行");
			return 3;
		}
	}
}
